package org.deng.vertx.common.util.pdf;


import lombok.extern.slf4j.Slf4j;


import java.io.File;
import java.io.IOException;

/**
 * @author DengLibin
 * @Description
 * @Date 2018/10/25 0025 18:02
 */
@Slf4j
public class HtmlToPdf {

    /**
     * html转pdf （安装wkhtmltopdf，并设置环境变量）
     * @param htmlPath
     * @param pdfOutPath
     */
    public  static  void  html2Pdf(String htmlPath, String pdfOutPath) throws IOException, InterruptedException {
        toPdf(htmlPath, pdfOutPath);
    }

    private static Process toPdf(String htmlPath, String pdfOutPath) throws IOException, InterruptedException {
        File file = new File(pdfOutPath);
        File parentFile = file.getParentFile();
        if(!parentFile.exists()){
            parentFile.mkdirs();
        }

        String ml = "wkhtmltopdf";

        String cmd = ml + //工具安装目录
                " -l -n --no-outline " + //参数 低PDF文档的质量
                " -q" + //参数 静态模式，不在标准输出中打印任何信息
                " -T 12.7mm -R 12.7mm -L 12.7mm -B 12.7mm " + //设置页面的边距
                //" C:\\Users\\DengLibin\\Desktop\\pdf\\table.html" + //html路径
                " " + htmlPath + //html路径
                " " + pdfOutPath;
        log.info("生成pdf命令:{}", cmd);
        Process exec = Runtime.getRuntime().exec(cmd);//生成的Pdf路径
        exec.waitFor();
        return exec;
    }



    /**
     * 生成pdf，不使用异步的方式
     * @param htmlPath
     * @param pdfOutPath
     * @param size
     * @return
     * @throws IOException
     * @throws InterruptedException
     */
    public static Process toPdf(String htmlPath, String pdfOutPath ,String size) throws IOException, InterruptedException {
        String ml = "C:\\Program Files\\wkhtmltopdf\\binwkhtmltopdf.exe";

        String sizeCode = "A3".equals(size) ?  " -T 0mm -R 0mm -L 0mm -B 0mm ":" -T 0mm -R 0mm -L 0mm -B 0mm ";
        String cmd = ml + //工具安装目录
                " --disable-smart-shrinking " +//不适用缩放
                " -l -n --no-outline " + //参数 低PDF文档的质量
                " --page-size "+size+
                " -q " + //参数 静态模式，不在标准输出中打印任何信息
                sizeCode + //设置页面的 上边距
                //" C:\\Users\\DengLibin\\Desktop\\pdf\\table.html" + //html路径
                " " + htmlPath + //html路径
                " " + pdfOutPath;
        return Runtime.getRuntime().exec(cmd);//生成的Pdf路径
    }

    public static void main(String[] args) throws IOException, InterruptedException {
        html2Pdf("C:\\Users\\mdjro\\Desktop\\demo.html", "C:\\Users\\mdjro\\Desktop\\demo.pdf");
    }
}
